package facade;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import servicios.AdmServicios;
import utilidades.XMLParser;
import dao.CasaCentralDAO;
import dao.ListaPreciosDAO;
import dao.MateriaPrimaDAO;
import dao.RodamientoDAO;
import dao.VentaRodamientoDAO;
import dto.MateriaPrimaAPedirDTO;
import dto.MateriaPrimaDTO;
import dto.OrdenCompraCCDTO;
import dto.RodamientoDTO;
import entities.CasaCentral;
import entities.ListaDePrecios;
import entities.MateriaPrima;
import entities.Rodamiento;

/**
 * Session Bean implementation class ProveedorFacadeBean
 */
@Stateless
public class ProveedorFacadeBean implements ProveedorFacade {

    @EJB
	private RodamientoDAO admRodamiento;
    
    @EJB
    private MateriaPrimaDAO admMateriaPrima;
    
	@EJB
	private ListaPreciosDAO admListaPreciosDAO;
    
	@EJB 
	private VentaRodamientoDAO admventaRodamiento;
	
	@EJB
	private AdmServicios admServicios;
	
	@EJB
	private CasaCentralDAO admCasaCentral;
	
		
	
	@Override
	public void crearRodamiento(RodamientoDTO rodDTO) {
	    
		Rodamiento rod = new Rodamiento(rodDTO);
		admRodamiento.generarRodamiento(rod);
		CasaCentral casaCentral = admCasaCentral.obtenerCasaCentral();
	    admServicios.enviarRodamiento(rod,casaCentral);	
		
		
	}

	@Override
	public List<MateriaPrimaDTO> getListaMateriasPrima() {
		List<MateriaPrimaDTO> listaMateriaDTO = new ArrayList<MateriaPrimaDTO>();
		List<MateriaPrima> listaMaterias = admMateriaPrima.getListaMateriaPrima();
		for (MateriaPrima materiaPrima : listaMaterias) {
			MateriaPrimaDTO matDTO = new MateriaPrimaDTO(materiaPrima);
			listaMateriaDTO.add(matDTO);
			}
		return listaMateriaDTO;
		
	}

	@Override
	public ListaDePrecios obtenerListaDePrecios() {
		System.out.println("Llego al P FACADE BEAN");
		return admListaPreciosDAO.obtenerListaDePrecios();
	}

	@Override
	public void recibirOCCC(String ordencompra) {
		OrdenCompraCCDTO ordenCompraCCDTO = (OrdenCompraCCDTO)XMLParser.getInstance().parseObject(ordencompra);
		CasaCentral casaCentral = admCasaCentral.obtenerCasaCentral();
        List<MateriaPrimaAPedirDTO> listaMateriaPrimaAPedir = admventaRodamiento.venderRodamientos(ordenCompraCCDTO);
        if(listaMateriaPrimaAPedir!=null && !listaMateriaPrimaAPedir.isEmpty()){
            if(admServicios.enviarPedidoDeMateriaPrima(listaMateriaPrimaAPedir,casaCentral))
            	admServicios.enviarConfirmacionOrdenCompraACasaCentral(ordenCompraCCDTO,casaCentral);          
        }else
            admServicios.enviarConfirmacionOrdenCompraACasaCentral(ordenCompraCCDTO,casaCentral);
		
	}

	@Override
	public Boolean recibirMateriasPrimas(String materiasPrimasRecibidas) {
		try {
			@SuppressWarnings("unchecked")
			List<MateriaPrimaAPedirDTO>listaMateriasPrimasRecibidas=(List<MateriaPrimaAPedirDTO>) XMLParser.getInstance().parseObject(materiasPrimasRecibidas);
			for (MateriaPrimaAPedirDTO materiaPrimaAPedirDTO : listaMateriasPrimasRecibidas) {
				materiaPrimaAPedirDTO.getMateriaPrima().setStock(materiaPrimaAPedirDTO.getCantidad()/2);
				admMateriaPrima.actualizarMateriaPrimaDTO(materiaPrimaAPedirDTO.getMateriaPrima());
			}
			System.out.println("Materias primas almacenadas");
			return true;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

}
